package com.csy.ocmis.controller;


import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.csy.ocmis.entity.Cashier;
import com.csy.ocmis.entity.Pharmacy;
import com.csy.ocmis.entity.ReportVo;
import com.csy.ocmis.service.ICashierService;
import com.csy.ocmis.service.IPharmacyService;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * <p>
 *  前端控制器
 * </p>
 *
 * @author csy
 * @since 2020-11-30
 */
@RestController
@RequestMapping("/cashier")
public class CashierController {
    @Autowired
    private ICashierService cashierService;
    @Autowired
    private IPharmacyService pharmacyService;

    //查询所有患者信息
    @RequestMapping("selpreson")
    public Object selperson(Integer page, Integer limit) {
        PageHelper.startPage(page, limit);
        List<ReportVo> list = cashierService.selPer();
        PageInfo pageInfo = new PageInfo(list);
        Map<String, Object> tableData = new HashMap<String, Object>();
        //这是layui要求返回的json数据格式，如果后台没有加上这句话的话需要在前台页面手动设置
        tableData.put("code", 0);
        tableData.put("msg", "");
        //将全部数据的条数作为count传给前台（一共多少条）
        tableData.put("count", pageInfo.getTotal());
        //将分页后的数据返回（每页要显示的数据）
        tableData.put("data", pageInfo.getList());
        return tableData;
    }

    //查询该用户所有的处方
    @RequestMapping("selall")
    public Object selall(Integer perid, Integer page, Integer limit) {
        QueryWrapper<Cashier> wrapper = new QueryWrapper<>();
        wrapper.eq("reportId", perid);
        wrapper.ne("state", 2);
        List<Cashier> selall = cashierService.list(wrapper);
        PageHelper.startPage(page, limit);
        PageInfo pageInfo = new PageInfo(selall);
        Map<String, Object> tableData = new HashMap<String, Object>();
        //这是layui要求返回的json数据格式，如果后台没有加上这句话的话需要在前台页面手动设置
        tableData.put("code", 0);
        tableData.put("msg", "");
        //将全部数据的条数作为count传给前台（一共多少条）
        tableData.put("count", pageInfo.getTotal());
        //将分页后的数据返回（每页要显示的数据）
        tableData.put("data", pageInfo.getList());
        return tableData;
    }

    //查询处方中是否有这个药
    @RequestMapping("selchu")
    public Object seslchu(Cashier cCashier, Integer reid, String mename) {
        QueryWrapper<Cashier> wrapper = new QueryWrapper<>();
        wrapper.eq("reportId", reid);
        wrapper.eq("durgname", mename);
        Integer selcadr = cashierService.count(wrapper);
        return selcadr;
    }

    //添加处方药品
    @RequestMapping("addchu")
    public Object addchu(Cashier cCashier, Pharmacy cPharmacy) {
        //向处方添加药品
        cCashier.setState(0);
        boolean addchu = cashierService.save(cCashier);
        String pharmacyName = cCashier.getDurgname();
        cPharmacy.setPharmacyName(pharmacyName);
        //减少药房中的数量
        Integer deldrunum = pharmacyService.updatePha(cPharmacy);
        return addchu;
    }

    //如果处方中有该药品则修改该药品的数量和价钱
    @RequestMapping("updchu")
    public Object updchu(Cashier cCashier, Pharmacy cPharmacy) {
        //修改处方中药品的数量
        Integer updchu = cashierService.updchu(cCashier);
        String pharmacyName = cCashier.getDurgname();
        cPharmacy.setPharmacyName(pharmacyName);
        //修改仓库中药品的数量
        Integer deldrunum = pharmacyService.updatePha(cPharmacy);
        return updchu;
    }

    //删除处方中的药品
    @RequestMapping("del")
    public Object del(Integer cashier, String durnme, Integer durnum, Pharmacy cPharmacy) {
        boolean del = cashierService.removeById(cashier);
        cPharmacy.setPharmacyName(durnme);
        cPharmacy.setDrugstorenum(durnum);
        pharmacyService.adddrunum(cPharmacy);
        return del ? "删除成功" : "删除失败";
    }

    //项目划价
    //查看用户的检查结果
    @RequestMapping("lookbing")
    @ResponseBody
    public Object lookbing(Integer reid){
        return cashierService.getById(reid).getJie();
    }
    //查询用户所有的项目处方
    @RequestMapping("selximu")
    public Object selximu(Integer perid, Integer page, Integer limit) {
        QueryWrapper<Cashier> wrapper = new QueryWrapper<>();
        wrapper.eq("reportId", perid);
        wrapper.eq("state", 1);
        List<Cashier> selximu = cashierService.list(wrapper);
        PageHelper.startPage(page, limit);
        PageInfo pageInfo = new PageInfo(selximu);
        Map<String, Object> tableData = new HashMap<String, Object>();
        //这是layui要求返回的json数据格式，如果后台没有加上这句话的话需要在前台页面手动设置
        tableData.put("code", 0);
        tableData.put("msg", "");
        //将全部数据的条数作为count传给前台（一共多少条）
        tableData.put("count", pageInfo.getTotal());
        //将分页后的数据返回（每页要显示的数据）
        tableData.put("data", pageInfo.getList());
        return tableData;
    }

    //添加处方药品
    @RequestMapping("addchuo")
    public Object addchuo(Cashier cashier, Integer ostate) {
        cashier.setState(1);
        cashier.setOstate(ostate);
        cashier.setMstate(0);
        //向处方添加药品
        boolean addchuo = cashierService.save(cashier);
        return addchuo;
    }

    //删除处方中的药品
    @RequestMapping("delo")
    public Object delo(Integer cashier) {
        boolean delo = cashierService.removeById(cashier);
        return delo ? "删除成功" : "删除失败";
    }

    //选择患者后对该患者的项目进行查询
    @RequestMapping("selxiang")
    public Object selxiang(Integer page, Integer limit, Integer perid) {
        PageHelper.startPage(page, limit);
        List<Cashier> mohu = cashierService.selxiang(perid);
        PageInfo pageInfo = new PageInfo(mohu);
        Map<String, Object> tableData = new HashMap<String, Object>();
        //这是layui要求返回的json数据格式，如果后台没有加上这句话的话需要在前台页面手动设置
        tableData.put("code", 0);
        tableData.put("msg", "");
        //将全部数据的条数作为count传给前台（一共多少条）
        tableData.put("count", pageInfo.getTotal());
        //将分页后的数据返回（每页要显示的数据）
        tableData.put("data", pageInfo.getList());
        return tableData;
    }

    //点击确认收费前确定该患者有没有收费项目
    @RequestMapping("selshoux")
    public Object selshoux(Integer perid) {
        Double selshoux = cashierService.selshoux(perid);
        return selshoux;
    }

    //项目缴费修改项目的收费状态
    @RequestMapping("shoufei")
    public Object shoufei(Integer perid) {
        Integer updxiang = cashierService.updxiang(perid);
        return updxiang;
    }


    //项目检查
    //查询该用户的所有要检查的项目
    @RequestMapping("selcha")
    public Object selcha(Integer page, Integer limit, Integer perid) {
        PageHelper.startPage(page, limit);
        List<Cashier> selcha = cashierService.selcha(perid);
        PageInfo pageInfo = new PageInfo(selcha);
        Map<String, Object> tableData = new HashMap<String, Object>();
        //这是layui要求返回的json数据格式，如果后台没有加上这句话的话需要在前台页面手动设置
        tableData.put("code", 0);
        tableData.put("msg", "");
        //将全部数据的条数作为count传给前台（一共多少条）
        tableData.put("count", pageInfo.getTotal());
        //将分页后的数据返回（每页要显示的数据）
        tableData.put("data", pageInfo.getList());
        return tableData;
    }

    //添加用户项目的检查结果
    @RequestMapping("addbing")
    public Object addbing(Cashier cCashier, Integer reid, String bing, Integer cashier) {
        QueryWrapper<Cashier> wrapper = new QueryWrapper<>();
        wrapper.eq("reportId", reid);
        wrapper.eq("cashier", cashier);
        cCashier.setJie(bing);
        boolean addjie = cashierService.update(cCashier, wrapper);
        return addjie;
    }

    //查询该用户的处方
    @RequestMapping("selpepi")
    public Object selpepi(Integer perid, Integer page, Integer limit) {
        List<Cashier> selpepi = cashierService.selpepci(perid);
        PageHelper.startPage(page, limit);
        PageInfo pageInfo = new PageInfo(selpepi);
        Map<String, Object> tableData = new HashMap<String, Object>();
        //这是layui要求返回的json数据格式，如果后台没有加上这句话的话需要在前台页面手动设置
        tableData.put("code", 0);
        tableData.put("msg", "");
        //将全部数据的条数作为count传给前台（一共多少条）
        tableData.put("count", pageInfo.getTotal());
        //将分页后的数据返回（每页要显示的数据）
        tableData.put("data", pageInfo.getList());
        return tableData;
    }

    //查看该用户是否还有未交钱的项目
    @RequestMapping("seljiao")
    public Object seljiao(Integer reid) {
        int seljiao = cashierService.seljiao(reid);
        return seljiao;
    }

    //查看该用户是否有缴费未做的项目
    @RequestMapping("selwei")
    public Object selwei(Integer reid) {
        //查询该用户有几个做过的项目
        Integer selyi = cashierService.selyi(reid);
        //查询该用户有几个缴费的项目
        Integer selgong = cashierService.selgong(reid);
        if (selyi.equals(selgong)) {
            return 1;
        } else {
            return 0;
        }
    }

    //查询处方的总价钱
    @RequestMapping("selch")
    public Object selch(Cashier cCashier) {
        Double selch = cashierService.selch(cCashier);
        return selch;
    }




    //模糊查询
    //模糊查询
    @RequestMapping("mohu")
    @ResponseBody
    public Object mohu(String durgname,ReportVo reportVo, Integer page, Integer limit){
        reportVo.setReportName(durgname);
        PageHelper.startPage(page, limit);
        List<ReportVo> mohu = cashierService.mohu(reportVo);
        PageInfo pageInfo = new PageInfo(mohu);
        Map<String, Object> tableData = new HashMap<String, Object>();
        //这是layui要求返回的json数据格式，如果后台没有加上这句话的话需要在前台页面手动设置
        tableData.put("code", 0);
        tableData.put("msg", "");
        //将全部数据的条数作为count传给前台（一共多少条）
        tableData.put("count", pageInfo.getTotal());
        //将分页后的数据返回（每页要显示的数据）
        tableData.put("data", pageInfo.getList());
        return tableData;
    }
    //查看该用户的总价格
    @RequestMapping("zong")
    @ResponseBody
    public Object zong(Integer reid){
        int zong = cashierService.zong(reid);
        return zong;
    }
}

